{{tag>dossier magique trier tri fichiers medias script}}


====== Dossier magique ====== 

Sur [[http://forum.ubuntu-fr.org/viewtopic.php?id=144237|l'initiative de xelator]], quelques scripts ont été créés afin de ranger automatiquement les fichiers selon leur contenu : les .ogg avec les .ogg, les .avi avec les .avi, etc. Ces scripts sont présentés ici, en cas de problème merci de poster sur le sujet précédemment cité.


===== Fichiers reconnus =====

Actuellement, le script reconnaît (en se basant notamment sur leur type MIME) les fichiers de type texte, pdf, dvi, ps/postscript, ogg, la plupart des formats audio,la plupart des formats video, flash, ASF, la plupart des formats image, les archives tar, rar et zip/gzip, les scripts shell, les documents MS-Word, et les fichiers LaTeX. N'hésitez pas à en rajouter (en le signallant sur le forum, merci...).



===== Le script =====

Copiez-collez le script suivant dans un fichier, que vous appellerez par exemple dossier_magique, pour faire original :

<code>
#!/bin/bash

# Définitions des répertoires, à adapter :
DIR=${HOME}
TXT=${DIR}/Documents
PDF=${DIR}/Documents
AUDIO=${DIR}/Musique
VIDEO=${DIR}/Videos
IMG=${DIR}/Images
ARCHIVES=${DIR}/Archives
DOCS=${DIR}/Documents
TEX=${DIR}/Documents
MISC=${DIR}/Divers


# Fichier de log :
LOG=/dev/null


# Déplacement d'un fichier et mise à jour du fichier log :
function bouge()
{
    mv ${1} ${2}
    heure=`date +%D-%H:%m`
    echo "[${heure}] ${1} déplacé dans ${2}" >> ${LOG}
    return 0
}


# Créons les répertoires s'ils n'existent pas :
function createdirs()
{
    mkdir -p ${TXT}
    mkdir -p ${PDF}
    mkdir -p ${AUDIO}
    mkdir -p ${VIDEO}
    mkdir -p ${IMG}
    mkdir -p ${ARCHIVES}
    mkdir -p ${DOCS}
    mkdir -p ${TEX}
    mkdir -p ${MISC}

    return 0
}

# Trions les fichiers :
function tri()
{
    cd ${1}
    ls > /tmp/tri
    sed -i 's/\ /_/g' /tmp/tri
    echo "Triage des fichiers du répertoire ${1}..."
    while read fichier
    do
        # Utilisons si possible le type mime :
        type=`file -bi ${fichier}`

        case ${type} in
            *text*) bouge ${fichier} ${TXT};;
        
            *pdf* | *dvi* | *postscript*) bouge ${fichier} ${PDF};;
            
            *audio* | *ogg*) bouge ${fichier} ${AUDIO};;
        
            *video* | *flash*) bouge ${fichier} ${VIDEO};;
    
            *image*) bouge ${fichier} ${IMG};;

            *tar* | *rar* | *zip*) bouge ${fichier} ${ARCHIVES};;

            *shellscript*) bouge ${fichier} ${TXT};;
            
            *msword*) bouge ${fichier} ${DOCS};;
        esac
        
        # Si le type mime ne suffit pas :
        type=`file -b ${fichier}`

        case ${type} in
            *directory*) continue;;
               
            *LaTeX*) bouge ${fichier} ${TEX};;
        
            *ASF*) bouge ${fichier} ${VIDEO};;
    
                      # Type inconnu :
            *) bouge ${fichier} ${MISC};;
        esac

    done < /tmp/tri

    echo "Terminé."
    cd ${OLDDIR}

    return 0
}


# Si des répertoires sont passés en argument, on les trie, sinon on trie le répertoire par défaut
OLDDIR=`pwd`
createdirs
if [ $# -eq 0 ]
then
    tri ${DIR}
else
    while [ $# -gt 0 ]
    do
        tri ${1}
        shift
    done
fi
exit 0
</code>

Rendez ce fichier exécutable.
- En console :
  chmod +x /chemin/vers/le/fichier/dossier_magique
- Sous gnome : clic droit sur le fichier > propriétés > permissions, et cochez la case "Exécution, autoriser l'exécution du fichier comme un programme".

===== Adaptation =====


==== Répertoires ====

<note importante>
En l'état, ce script ne fera pas ce que vous voulez. Vous devez adapter les définitions des répertoires, au début du script.
</note>

Dans cet exemple, les dossiers sont tous situés dans le répertoire /home/votre_login (toutes les définitions commencent par **${DIR}/**, or DIR=${HOME}).

Les dossiers par défaut existent sous Ubuntu Gutsy (mais pas sous les versions précédentes !), à l'exception des dossiers Divers et Archives.

==== Types de fichier ====

Pour supprimer par exemple les fichiers de type rar, il suffit de modifier la ligne :
<code>*tar* | *rar* | *zip*) bouge ${fichier} ${ARCHIVES};;</code>
en :
<code>*tar* | *zip*) bouge ${fichier} ${ARCHIVES};;</code>

De même, pour rajouter un type de fichier, il suffit d'adapter ou de créer la ligne correspondante. Les types de fichiers sont reconnus grâce à la commande **file**, donc pour savoir quoi rajouter un petit test s'impose :
  file -bi un_fichier.test

===== Utilisation =====

En ligne de commande :
  dossier_magique répertoire1 répertoire2 ...

Si aucun répertoire n'est spécifié, le répertoire par défaut sera trié.

Si les noms des répertoires contiennent des espaces et autres caractères spéciaux, mettez-les systématiquement entre guillemets et précédez ces caractères d'un slash :
  dossier_magique "répertoire\ 1" "répertoire\ 2" ...

===== Fichier de log =====

Par défaut, il n'y a pas de fichier de log. Il suffit de modifier la ligne
  LOG=/dev/null
par
  LOG=chemin_du_fichier_voulu
pour garder une trace de tout mouvement de fichier dû au script.

===== Exécution automatique =====

Pour exécuter automatiquement le script toutes les 5 minutes, par exemple, vous pouvez utiliser [[crontab]]. On édite la crontab :
  crontab -e

Et on rajoute :
<code>*/5 * * * * /chemin/vers/dossier_magique</code>